package com.snacks;

import java.io.IOException;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import com.snacks.data.Cache;
import com.snacks.data.DataFromHttpSever;
import com.snacks.data.URLconstan;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Spinner;

public class Register extends Activity implements OnClickListener {
	private ProgressDialog dialog;
	private EditText username, passWord, email, mobile, repassWord;
	private Spinner spinCity;
	private Button btReset, btRegister;
	private String city = "Hà Nội", sex = "Nam";
	private RadioGroup select_sex;	
	private int ketqua;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.register);

		btReset = (Button) findViewById(R.id.btCancel);
		btReset.setOnClickListener(this);

		btRegister = (Button) findViewById(R.id.btRegister);
		btRegister.setOnClickListener(this);

		username = (EditText) findViewById(R.id.edtUsername);
		passWord = (EditText) findViewById(R.id.edtPassword);
		repassWord = (EditText) findViewById(R.id.edtPassword2);
		email = (EditText) findViewById(R.id.edtEmail);
		mobile = (EditText) findViewById(R.id.edtMobile);

		spinCity = (Spinner) findViewById(R.id.spinnerCity);
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
				this, R.array.danhsachthanhpho,
				android.R.layout.simple_spinner_item);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinCity.setAdapter(adapter);

		spinCity.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View arg1,
					int vi_tri_item, long id) {
				city = parent.getItemAtPosition(vi_tri_item).toString();

			}

			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub

			}
		});

		select_sex = (RadioGroup) findViewById(R.id.radioGroupGender);
		select_sex.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			public void onCheckedChanged(RadioGroup group, int checkedId) {
				switch (checkedId) {
				case R.id.rdMale:
					sex = "Nam";

					break;
				case R.id.rdFemale:
					sex = "Nữ";

					break;

				default:
					break;
				}
			}
		});
	}

	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.btCancel:

			break;
		case R.id.btRegister:
			new SignUpTask().execute();			
			break;
		default:
			break;
		}
	}

	// register member
	private void registerUser(String username, String password, String email, String phone, String city, String gender) {	

		ArrayList<NameValuePair> rq = new ArrayList<NameValuePair>();
		rq.add(new BasicNameValuePair("username", username));
		rq.add(new BasicNameValuePair("password", password));
		rq.add(new BasicNameValuePair("email", email));
		rq.add(new BasicNameValuePair("thanhpho", city));
		rq.add(new BasicNameValuePair("mobile", phone));
		rq.add(new BasicNameValuePair("gioitinh", gender));

		try {
			Log.i("SignUp", "Đang kết nối tới sever đẻ đăng kí...");
			HttpClient httpclient = new DefaultHttpClient();
			HttpPost httppost = new HttpPost(URLconstan.getSignService());
			if (rq != null) {
				Log.i("SignUp", "Gửi đi Dữ liệu" + String.valueOf(rq));
				httppost.setEntity(new UrlEncodedFormEntity(rq));
			}
			HttpResponse response = httpclient.execute(httppost);
			HttpEntity entity = response.getEntity();
			entity.getContent();
			Log.i("SignUp", entity.getContent().toString());
			Log.i("SignUp", "Đã  kết nối tới sever...");
		} catch (IOException e) {
			Log.e("SignUp", "Lỗi kết nối:" + e.toString());
		} catch (Exception e) {
			Log.e("SignUp", "Lỗi kết nối:" + e.toString());
		}
	}
	
	public boolean UserNameExist(String username) {
		boolean ret;
		ArrayList<NameValuePair> rq;
		rq = new ArrayList<NameValuePair>();
		rq.add(new BasicNameValuePair("username", username.trim()));
		DataFromHttpSever dt = new DataFromHttpSever();
		String check = dt.getDataFromHttpSever(rq, URLconstan.getExistsUserService());
		if (check.startsWith("%null&data%")) {
			ret = false;
		} else {
			ret = true;
		}
		return ret;
	}

	private void closeDialog() {
		this.dialog.dismiss();
	}

	private void showDialog() {
		this.dialog = ProgressDialog.show(Register.this, "Chờ trong giây lát", "Đang tải dữ liệu", true);
	}

	public void showMessage(String title, String message) {
		AlertDialog.Builder builder = new AlertDialog.Builder(Register.this);
		builder.setTitle(title);
		builder.setMessage(Html.fromHtml(message));
		builder.setCancelable(false);
		builder.setNegativeButton("Đồng ý",
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int id) {
						closeDialog();
						dialog.cancel();

					}
				});
		builder.show();
	}

	public void showMessageSuccess(String title, String message) {
		AlertDialog.Builder builder = new AlertDialog.Builder(Register.this);
		builder.setTitle(title);
		builder.setMessage(Html.fromHtml(message));
		builder.setCancelable(false);
		builder.setNegativeButton("Đăng nhập ngay",
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int id) {
						dialog.cancel();
						startActivity(new Intent().setClass(Register.this, Login.class));
					}
				});
		builder.show();
	}
	
	private class SignUpTask extends AsyncTask<Object, Object, Object> {
		@Override
		protected Object doInBackground(final Object... urls) {
			CheckSignUp();
			return null;
		}

		@Override
		protected void onPostExecute(final Object result) {
			closeDialog();
			Log.i("SignUp", "Ket qua=" + String.valueOf(Register.this.ketqua));
			if (Register.this.ketqua <= 4)
				showMessage("Đăng kí thất bại", "Không được bỏ trống bất kì mục nào ");
			else if (Register.this.ketqua == 5)
				showMessage("Đăng kí thất bại", "Email không hợp lệ ");
			else if (Register.this.ketqua == 6)
				showMessage("Đăng kí thất bại", "Số điện thoại không đúng..."
								+ "\n Bạn vui lòng nhập số điện thoại chính xác"
								+ "\n Chúng tôi sẽ không sử dụng số điện thoại của bạn với mục đích thương mại");
			else if (Register.this.ketqua == 7)
				showMessage("Đăng kí thất bại", "Mật khẩu tối thiểu phải có 6 kí tự..."
						+ "/nChú ý:Mật khẩu phân biệt chữ hoa và chữ thường"
						+ "/nDấu cách trong mật khẩu được coi là một kí tự");
			else if (Register.this.ketqua == 8)
				showMessage("Đăng kí thất bại", "Mật khẩu nhập lại không đúng");
			else if (Register.this.ketqua == 9)
				showMessage("Đăng kí thất bại", "Bạn phải nhập họ tên đầy đủ");
			else if (Register.this.ketqua == 9)
				showMessage("Đăng kí thất bại", "Tên tài khoản có từ không hợp lệ vui lòng nhập lại");
			else if (Register.this.ketqua == 15)
				showMessage("Đăng kí thất bại", "Tài khoản đã tồn tại xin chọn tên đăng nhập khác");
			else if (Register.this.ketqua == 16) {
				Cache.setCacheUserData(String.valueOf(Register.this.username.getText()).trim());
				showMessageSuccess("Chúc mừng bạn!", "Tài khoản đã đăng ký thành công");
			} else if (Register.this.ketqua == 15)
				showMessage("Đăng kí thất bại", "Tài khoản không thể khởi tạo được do lí do đường truyền hoặc sever bị lỗi");

		}

		@Override
		protected void onPreExecute() {
			showDialog();
		}
	}

	public void CheckSignUp() {		
		String Username = username.getText().toString().trim();
		String Password = passWord.getText().toString().trim();
		String RePassword = repassWord.getText().toString().trim();
		String Email = email.getText().toString().trim();
		String Phone = mobile.getText().toString().trim();
		String tp = city;
		String gender = sex;
		
		if (Username.equals("")) {
			this.ketqua = 1;		
		} else if (String.valueOf(Password).equals("")) {
			this.ketqua = 2;
		} else if (String.valueOf(Email).equals("")) {
			this.ketqua = 3;
		} else if (String.valueOf(Username).equals("")) {
			this.ketqua = 4;
		} else if (String.valueOf(Username).split(" ").length < 1) {
			this.ketqua = 9;
		} else if (String.valueOf(Phone).equals("")) {
			this.ketqua = 4;
		} else if (String.valueOf(String.valueOf(Email)).indexOf("@") == -1) {
			this.ketqua = 5;		
		} else if (String.valueOf(Email).indexOf(".") == -1) {
			this.ketqua = 5;
		} else if (String.valueOf(Phone).length() < 10) {
			this.ketqua = 6;
		} else if (String.valueOf(Phone).length() > 12) {
			this.ketqua = 6;
		} else if (!String.valueOf(Phone).startsWith("0")) {
			this.ketqua = 6;
		} else if (String.valueOf(Password).length() < 6) {
			this.ketqua = 7;
		} else if (!String.valueOf(RePassword).equals(String.valueOf(Password))) {
			this.ketqua = 8;
		}

		else {
			if (UserNameExist(Username)) {
				this.ketqua = 15;
			} else {
				registerUser(Username, Password, Email, Phone, tp, gender);
				
				if (UserNameExist(Username)) {
					Register.this.ketqua = 16;
				} else {
					Register.this.ketqua = 17;
				}
			}
		}
	}
}
